package cn.doitedu.day03

import scala.collection.parallel.mutable.ParArray

/**
 * scala的并行化集合
 * //如果一个数组或集合中的数据很多，一个线程进行聚合操作，效率较低
 *
 */
object ParCollection {

  def main(args: Array[String]): Unit = {

    val arr = Array(2, 5, 1, 8, 9, 8,       3, 5, 7, 6, 4, 2, 9)

    //将普通的数组编程并行化的数组
    val parArr: ParArray[Int] = arr.par

    //将数组或结合调用par方法，编程并行化集合，scala内部，会将集合逻辑的分割成多个小部分（小集合）
    //然后启动多个线程，每个线程计算一个小集合，最后在进行全局聚合
    //类似实现了单机版mapReduce，即多个线程进行聚合操作
    val r1 = parArr.reduce(_ + _)

    println(r1)

    val r2 = parArr.fold(1000)(_ + _)

    println(r2)


    val r3 = parArr.aggregate(0)(_ + _, _ + _)
    println(r3)

  }

}
